package com.example.fistboot.recursion;

/**
 * 实现递归打印🎄
 *
 * 因为最近是圣诞节
 * 使用空格+星号表示
 *
 * 假定星号和空格的占位符等宽等高
 * 可以设置参数指定图形的大小 打印几行
 *
 * 如果输入3则代表打印三行，第三行都是星号，第二行是两个
 */
public class RecursionDemo {
    public static void main(String[] args) {
//        System.out.println("   *"); //3空格1星号
//        System.out.println("  * *"); //2空格2星号
//        System.out.println(" * * * ");//1空格3星号
//        System.out.println("* * * * ");//0空格4星号
        run(7,2);
    }

    /**
     * 主逻辑
     * @param countLine 指定几行星号
     * @param rootLine 指定几行树干
     */
    private static void run(int countLine,int rootLine){
        new RecursionDemo().dfs(countLine,1);
        for (int j = 0; j < rootLine; j++) {
        for (int i = 0; i < countLine-1; i++) {
            System.out.print(' ');
        }
        System.out.println('|');
        }
    }

    private void dfs(int x,int line){
        if (x==0) return;
        int space = x-1;
        for (int i = 0; i < space; i++) System.out.print(' ');
        for (int i = 0; i < line; i++) System.out.print("* ");
        System.out.println();
        dfs(--x,++line);
    }
}
